/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.losalpes.compra;

import com.losalpes.businessEntities.Articulo;
import com.losalpes.persistence.entity.Compra;
import com.losalpes.persistence.entity.FormaPago;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.faces.model.SelectItem;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;

/**
 *
 * @author integradores
 */
public class CompraBean {

    private ICompraService compraService;
    private ArrayList<Compra> compras;
    private ArrayList<Articulo> articulosInterior;
    private ArrayList<Articulo> articulosExterior;
    private ArrayList<String> ciudades;
    private Articulo masVendido;
    private String fechaActual;
    private String fechaInicial;
    private String fechaFinal;
    private boolean opened;
    private String selectedItem; 
    private double total;
    private String numeroDocumento;
    private Compra compra;

    /**
     * Constructor por defecto
     */
    public CompraBean() {

        this.compraService = new CompraServiceMock();
        this.compras = this.compraService.findAll();
        this.articulosExterior = new ArrayList<Articulo>();
        this.articulosInterior = new ArrayList<Articulo>();
        this.ciudades = new ArrayList<String>();
        this.ciudades = this.compraService.findAllCities();
        this.masVendido = new Articulo();
        this.opened = false;
        this.compra = new Compra();
    }

    public void getCompraByFecha() {
        this.opened = true;
        Date now = new Date();
        DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
        this.fechaActual = df.format(now);
        this.compras = this.compraService.findAllByDate(getFechaInicial(), getFechaFinal());
        this.articulosExterior = this.compraService.findAllArticulosByTipoExterior(compras);
        this.articulosInterior = this.compraService.findAllArticulosByTipoInterior(compras);

        if (this.compras.size() == 0) {
            this.opened = false;
        }
    }

    public void getCompraByMasVendido() {
        this.opened = true;
        Date now = new Date();
        DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
        this.fechaActual = df.format(now);
        this.masVendido = this.compraService.findMostSold(this.fechaInicial,
                this.fechaFinal, this.selectedItem);

        if (this.masVendido.getCantidad() == 0) {
            this.opened = false;
        }
    }

    public void getCompraByCliente()
    {
        this.opened = true;
        Date now = new Date();
        DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
        this.fechaActual = df.format(now);
        this.compras = this.compraService.findAllByCustomerId(this.numeroDocumento,
                this.fechaInicial, this.fechaFinal);

        if (this.compras.size() == 0) {
            this.opened = false;
        }
    }

    public String getFechaFinal() {
        return fechaFinal;
    }

    public void setFechaFinal(String fechaFinal) {
        this.fechaFinal = fechaFinal;
    }

    public String getFechaInicial() {
        return fechaInicial;
    }

    public void setFechaInicial(String fechaInicial) {
        this.fechaInicial = fechaInicial;
    }

    public String getFechaActual() {
        return fechaActual;
    }

    public void setFechaActual(String fechaActual) {
        this.fechaActual = fechaActual;
    }

    public List getArticulosExterior() {
        return this.articulosExterior;
    }

    public List getArticulosInterior() {
        return this.articulosInterior;
    }

    public boolean isOpened() {
        return opened;
    }

    public void setOpened(boolean opened) {
        this.opened = opened;
    }

    public double getTotal() {
        return this.compraService.getTotal(this.articulosExterior, this.articulosInterior);
    }

    public void setTotal(double total) {
        this.total = total;
    }

    public List getCiudades()
    {
        return ciudades;
    }

    /**
     * retorna los tipos de documento disponibles
     * @return
     */
    public SelectItem[] getSelectedItems() {
        SelectItem[] sitems = new SelectItem[this.ciudades.size()];
        for (int i = 0; i < sitems.length; i++) {
            sitems[i] = new SelectItem(this.ciudades.get(i));
        }

        return sitems;
    }

    public String getSelectedItem() {
        return selectedItem;
    }

    public void setSelectedItem(String selectedItem) {
        this.selectedItem = selectedItem;
    }

    public Articulo getMasVendido() {
        return masVendido;
    }

    public void setMasVendido(Articulo masVendido) {
        this.masVendido = masVendido;
    }

    public String getNumeroDocumento() {
        return numeroDocumento;
    }

    public void setNumeroDocumento(String numeroDocumento) {
        this.numeroDocumento = numeroDocumento;
    }

    public List getCompras() {
        return compras;
    }

    public Compra getCompra() {
        return compra;
    }

    public void setCompra(Compra compra) {
        this.compra = compra;
    }

    public SelectItem[] getFormasPago() {
        FormaPago[] tipos = FormaPago.values();
        SelectItem[] sitems = new SelectItem[tipos.length];
        for (int i = 0; i < sitems.length; i++) {
            sitems[i] = new SelectItem(tipos[i]);
        }
        return sitems;
    }

    private void EnviarCorreo() throws EmailException{
        SimpleEmail email = new SimpleEmail();
        email.setHostName("smtp.uniandes.edu.co");
        //email.setSSL(true);
        email.addTo("g.coronel118@uniandes.edu.co");
        email.setAuthentication("hr.quimbayo26", "8922056");
        email.setFrom("usuario@uniandes.edu.co", "Me");
        email.setSubject("Compra Efectuada");
        email.setMsg("Su compra se efectuó correctamente.");
        email.send();
    }

    public void add(){
        compraService.add(this.compra);
        this.compras.add(this.compra);
    }


    public String FinalizarCompra() throws EmailException{
        //this.EnviarCorreo();
        this.add();
        return "finalizar";
    }

    public void findAll(){
        this.compras = this.compraService.findAll();
    }

}
